package com.ethink.warehouse.api;

import com.ethink.warehouse.api.info.LogisticsStepInfo;
import com.ethink.warehouse.api.request.*;
import com.ethink.warehouse.api.response.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestParam;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;

/**
 * 物流跟进单 Facade接口
 *
 * @author default
 * @date 2022-11-10
 */
@FeignClient(name = "ethink-warehouse-service", path = "warehouse-service/facade/v1/logisticsTraceOrder", contextId = "logisticsTraceOrderFacade")
public interface LogisticsTraceOrderFacade {

    @PostMapping("/queryLogisticsTraceOrder")
    @ResponseBody
    Page<LogisticsTraceOrderQueryResponse> queryLogisticsTraceOrder(@RequestBody LogisticsTraceOrderQueryRequest request);

    @PostMapping("/queryLogisticsTraceOrderGoodsMode")
    @ResponseBody
    Page<LogisticsTraceOrderQueryGoodsModeResponse> queryLogisticsTraceOrderGoodsMode(@RequestBody LogisticsTraceOrderQueryGoodsModeRequest request);

    @PostMapping("/getLogisticsTraceOrderById")
    @ResponseBody
    LogisticsTraceOrderGetDetailResponse getLogisticsTraceOrderById(@RequestParam("logisticsTraceOrderId") Long logisticsTraceOrderId);

    @PostMapping("/listLogisticsTraceOrderRkConfirmDetail")
    @ResponseBody
    List<LogisticsTraceOrderListRkConfirmDetailResponse> listLogisticsTraceOrderRkConfirmDetail(@RequestParam("logisticsTraceOrderId") Long logisticsTraceOrderId);

    @PostMapping("/addLogisticsTraceOrder")
    @ResponseBody
    LogisticsTraceOrderAddResponse addLogisticsTraceOrder(@RequestBody LogisticsTraceOrderAddRequest request);

    @PostMapping("/updateLogisticsTraceOrder")
    @ResponseBody
    void updateLogisticsTraceOrder(@RequestBody LogisticsTraceOrderUpdateRequest request);

    @PostMapping("/updateLogisticsTraceOrderStep")
    @ResponseBody
    LogisticsTraceOrderUpdateStepResponse updateLogisticsTraceOrderStep(@RequestBody LogisticsTraceOrderUpdateStepRequest request);

    @PostMapping("/backLogisticsTraceOrderPreviousStep")
    @ResponseBody
    void backLogisticsTraceOrderPreviousStep(@RequestBody LogisticsTraceOrderBackPreviousStepRequest request);

    @PostMapping("/deleteLogisticsTraceOrder")
    @ResponseBody
    void deleteLogisticsTraceOrder(@RequestParam("logisticsTraceOrderId") Long logisticsTraceOrderId);

    @PostMapping("/submitLogisticsTraceOrderOA")
    @ResponseBody
    void submitLogisticsTraceOrderOA(@RequestBody LogisticsTraceOrderOaSubmitRequest request);

    @PostMapping("/approvedLogisticsTraceOrderOA")
    @ResponseBody
    void approvedLogisticsTraceOrderOA(@RequestBody LogisticsTraceOrderOaApprovedRequest request);

    @PostMapping("/getLogisticsStepList")
    @ResponseBody
    List<LogisticsStepInfo> getLogisticsStepList(@RequestBody LogisticsStepListGetRequest request);

}